import GET from '@/interfaces/ajax'
let Get = GET.Get
import Vue from 'vue'
import Vuex from 'vuex'
import config from '../../config'
Vue.use(Vuex)
import listInfo from './lists/listInfo'
const List = {
    namespaced: true,
    state() {
        return {
            // 列表页数据
            listData: {
                list: []
            },
            // 筛选页数据
            filterData: {},
            // 页码初始值
            currentPage: 0,
            // 请求参数
            requestUrl: '',
            // scroll控件配置
            scrollConf: config.scrollConf,
            // 点击筛选后的弹窗初始状态
            filterPopupState: false,
            // 点击全部分类弹窗初始状态
            categoryPopupState: false,
            // 筛选页点击当前元素
            selectedInfo: {},
            // 点击全部分类中的一级标题，(比如)'男装'
            firstTitle: false,
            // 点击全部分类中的一级标题初始状态, 初始值关闭
            firstTitleState: false,
            // 点击全部分类中的二级标题，(比如)男装下面的'T恤'
            secondTitle: false,
            // 点击全部分类中的二级标题初始状态, 初始值关闭
            secondTitleState: false,
            // 点击全部分类中的一级标题中的全部，(比如)男装下的'全部'    
            firstAll: null,
            // 点击全部分类中的二级标题中的全部，(比如)男装-->T恤下的'全部'    
            secondAll: null,
            // 点击全部分类中的二级标题中的任意一项(除了全部)，(比如)男装-->T恤下的'长袖T恤' 
            secondItem: null,
            // 点击(比如) '品牌', 显示弹层,初始状态关闭
            categoryItemState: false,
            // 点击(比如) '品牌', 渲染'品牌'的数据
            categoryItem: null                                        
        }
    },
    actions: {
        // 列表页数据的请求
        async setList({ commit }, params) {
            let ret = await Get(config.interface.getSearchGoods + this.state.list.requestUrl + 'currentPage=' + this.state.list.currentPage)
            var data = ret.data
            if (this.state.list.currentPage !== 1) {
                for (var i = this.state.list.listData.list.length - 1; i >= 0; i--) {
                    data.list.unshift(this.state.list.listData.list[i])
                }
            }
            commit('setListData', data)
            let _scrollConf = Object.assign({}, this.state.list.scrollConf, {scrollerShow: true})
            commit('setScrollConf', _scrollConf)
        },
        // 筛选页数据的请求
        async setFilter({ commit }, params) {
            let ret = await Get(config.interface.getSearchFilter + this.state.list.requestUrl)
            commit('setFilterData', ret.data)
        },
        // 设置分页
        async setCurrentPage({ commit }, currentPage) {
            var stateCurrentPage = this.state.list.currentPage
            currentPage = currentPage || ++stateCurrentPage
            commit('setCurrentPage', currentPage)
        },
        // 设置请求参数
        async setRequest({ commit }, params) {
            var arrFilter = config.arrFilter
            var requestUrl = ''
            var requestParam = ''
            for (var x in arrFilter) {
                if (params[x] !== undefined) {
                    requestUrl += params[x] + '_'
                } else {
                    requestUrl += arrFilter[x] + '_'
                }
            }
            for (var y in params) {
                if (arrFilter[y] !== 'a' && y !== 'currentPage') {
                    requestParam += y + '=' + params[y] + '&'
                }
            }
            requestUrl += '.shtml?' + requestParam
            commit('setRequestUrl', requestUrl)
        },
        // scroll控件配置
        async setScrollConf({ commit }, scrollConf) {
            let _scrollConf = Object.assign({}, this.state.list.scrollConf, scrollConf)
            commit('setScrollConf', _scrollConf)
        },
        // 筛选弹窗逻辑
        async setFilterPopup({ commit }) {
            commit('setFilterPopup')
        },
        // 全部分类弹窗逻辑
        async setCategoryPopup({ commit }) {
            commit('setCategoryPopup')
        },
        // 点击全部分类中的一级标题逻辑，(比如)男装
        async setFirstTitle({ commit }, data) {
            commit('setFirstTitle', data)      
        },
        // 点击全部分类中的一级标题逻辑，(比如)男装
        async setSecondTitle({ commit }, data) {
            commit('setSecondTitle', data)      
        },   
        // 点击全部分类中的一级标题中的'全部'逻辑，(比如)男装下的'全部'
        async setFirstAll({ commit }, data) {
            commit('setFirstAll', data)      
        },   
        // 点击全部分类中的二级标题中的'全部'逻辑，(比如)男装-->T恤下的'全部'    
        async setSecondAll({ commit }, data) {
            commit('setSecondAll', data)      
        },
        // 点击全部分类中的二级标题中的任意一项逻辑，(比如)男装-->T恤下的'长袖T恤'   
        async setSecondItem({ commit }, data) {
            commit('setSecondItem', data) 
        },        
        // 点击全部分类中的二级标题中的任意一项逻辑，(比如)男装-->T恤下的'长袖T恤'   
        async setCategoryItem({ commit }, data) {
            commit('setCategoryItem', data) 
        }, 
        // 选中当前元素高亮逻辑    
        async setSelectedInfo({ commit }, data) {      
            var selected = {} 
            // 上一次点击元素的一些属性(页面刚加载时没有)
            var item = this.state.list.selectedInfo
            for (var i in item) {
                selected[i] = item[i]
            }
            // 把我当前点击的(比如)'品牌'做键名，点击事件传入的参数data做键值，然后再把selected传出去
            selected[data.code] = data
            commit('setSelectedInfo', selected)
        }
    },
    getters: {

    },
    mutations: {
        // 列表页数据赋值
        setListData: function (state, listData) {
            state.listData.list = state.listData.list.concat(listData.list)
        },
        // 筛选页数据的赋值
        setFilterData: function(state, filterData) {
            state.filterData = filterData
        },
        // 页码
        setCurrentPage: function(state, currentPage) {
            state.currentPage = currentPage
        },
        // 设置请求参数
        setRequestUrl: function(state, requestUrl) {
            state.requestUrl = requestUrl
        },
        // scroll控件配置
        setScrollConf: function(state, scrollConf) {
            state.scrollConf = scrollConf
        },
        // 筛选弹窗逻辑
        setFilterPopup: function(state) {
            state.filterPopupState = !state.filterPopupState
            state.filterPopupState === true ? document.querySelector('body').style.overflow = 'hidden' : document.querySelector('body').style.overflow = 'auto'
        },
        // 全部分类弹窗初逻辑
        setCategoryPopup: function(state) {
            state.categoryPopupState = !state.categoryPopupState     
        }, 
        // 获取当前点击元素高亮的一些信息
        setSelectedInfo: function(state, data) {
            state.selectedInfo = data
        },               
        // 点击全部分类中的一级标题逻辑，(比如)男装
        setFirstTitle: function(state, data) {
            // 获取我当前点击的元素
            state.firstTitle = data 
            // 显示与隐藏
            state.firstTitleState = !state.firstTitleState 
        },
        // 点击全部分类中的二级标题逻辑，(比如)男装下面的'T恤'
        setSecondTitle: function(state, data) {
            // 获取我当前点击的元素
            state.secondTitle = data 
            // 显示与隐藏
            state.secondTitleState = !state.secondTitleState 
        },
        // 点击全部分类中的一级标题中的'全部'逻辑，(比如)男装下的'全部'
        setFirstAll: function(state, data) {
            state.firstAll = data
            state.secondAll = null
            state.secondItem = null
        },
        // 点击全部分类中的二级标题中的全部，(比如)男装-->T恤下的'全部' 
        setSecondAll: function(state, data) {
            state.secondAll = data
            state.firstAll = null
            state.secondItem = null
        },
        // 点击全部分类中的二级标题中的任意一项(除了全部)，(比如)男装-->T恤下的'长袖T恤' 
        setSecondItem: function(state, data) {
            state.secondItem = data
            state.secondAll = null
            state.firstAll = null            
        },
        // 点击(比如) '品牌', 渲染'品牌'的数据
        setCategoryItem: function(state, data) {
            state.categoryItem = data 
            // 显示与隐藏
            state.categoryItemState = !state.categoryItemState         
        }        
    },
    modules: {       
        listInfo
    }
}
export default List

